package com.ptrsystem.siatd.controllers;

import org.springframework.stereotype.Controller;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class SubirArchivosController {

    @RequestMapping(value = "subirArchivosGet.htm", method = RequestMethod.GET)
    private String SubirArchivo() {
        return "Mantenimiento/SubirArchivo-Prueba";
    }

    @RequestMapping(value = "subirDocumento.htm", method = RequestMethod.POST)
    private void subirArchivos(HttpServletRequest req, HttpServletResponse res) throws IOException {
        PrintWriter out = res.getWriter();
        boolean flag = false;
        String fileName = "";
        List fileItems = null;
        String path = req.getSession().getServletContext().getRealPath("/");
        //String path = "/subirarchivos/docs";

        try {
            // construimos el objeto que es capaz de parsear la perición
            DiskFileItemFactory factory = new DiskFileItemFactory();

            // tamaño por encima del cual los ficheros son escritos directamente en disco
            factory.setSizeThreshold(4096);
            // directorio en el que se escribirán los ficheros con tamaño superior al soportado en memoria
            factory.setRepository(new File(path + "/"));

            // nuevo manejador para el fichero
            ServletFileUpload upload = new ServletFileUpload(factory);
            // maximo numero de bytes
            upload.setSizeMax(999999999);
            // ordenamos procesar los ficheros
            fileItems = upload.parseRequest(req);
            if (fileItems == null) {
                flag = false;
            }
            // Iteramos por cada fichero     
            Iterator i = fileItems.iterator();
            FileItem actual = null;

            if (i.hasNext()) {

                actual = (FileItem) i.next();
                fileName = actual.getName();

                // construimos un objeto file para recuperar el trayecto completo
                File fichero = new File(fileName);
                // nos quedamos solo con el nombre y descartamos el path
                fichero = new File(path + "../../../web/Docs" + "/" + fichero.getName());
                // escribimos el fichero colgando del nuevo path
                actual.write(fichero);

                flag = true;
            }
        } catch (Exception e) {
            out.println(e.getMessage());
        }

        //////////////////////////////////////////////////////////////////////////////////////
        if (flag) {
            out.println(fileName + " , subido correctamente :D");
        } else {
            out.println("Ha sido imposible subir el archivo ");
        }
        out.close();
    }
}
